home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
C64
/
R-Shows
/
(c)sdg.d64
/
graphic tut-3.64
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2007-02-04
|
18KB
|
470 lines
0 REM" P.J.PONZO*83*WATERLOO/ONTARIO
1 [143]"
1000 GOSUB60000:PRINTCHR$(142):PRINT"[147] GRAPHICS-3"
1001 PRINT"[176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"
1002 PRINT"[221] MORE C64 GRAPHICS [146] [221]":MS$="PONZOTUTOR"
1003 PRINT"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189][144]":GOSUB63100:MS$=" WELCOME!"
1004 GOSUB63100:GOSUB63000:PRINT"[147][144]";
1010 GOSUB7001
1020 GOSUB7600
1030 PRINTDN$"LET'S REVIEW..":GOSUB63000
1040 PRINTDN$"LET'S CALL BMM[146]=B[146]IT M[146]AP M[146]ODE BIT"
1050 A$=BM$:B$="[214]":GOSUB7100:GOSUB63000
1060 PRINTDN$"& MCM[146]=M[146]ULTI C[146]OLOUR M[146]ODE BIT"
1070 A$=MC$:B$="[214]":GOSUB7100:GOSUB63000
1080 PRINTDN$"SMB[146]=S[146]CREEN M[146]EMORY B[146]ASE"
1090 A$=SM$:B$="[214][214][214][214]":GOSUB7100:GOSUB63000
1100 PRINTDN$"CMB[146]=C[146]HARACTER M[146]EMORY B[146]ASE"
1110 A$=CM$:B$="[214][214][214][146]1":GOSUB7100:GOSUB63000
1120 PRINTDN$"ASSUME BMM[146]=0:MCM[146]=0 "
1130 A$=BMM$:B$="0":GOSUB7100
1140 A$=MCM$:B$="0":GOSUB7100:GOSUB63000:GOSUB7603
1145 PRINTDN$"..AND SCREEN MEMORY[146] STARTS AT 1024"
1150 A$=SMB$:B$="0001":GOSUB7100:GOSUB63000
1155 PRINTDN$"..AND CHARACTER[160]MEMORY[146] AT 53248"
1160 A$=CMB$:B$="010":GOSUB7100:GOSUB63000
1165 PRINTDN$"(PEEK(V+24)=21...NORMALLY)":GOSUB63000
1170 PRINTDN$"NOW POKE1025,2[146]":GOSUB63000
1180 PRINTDN$"SCREEN MEMORY LOC'N 1025 HAS '2'"
1190 A$=SC$:B$="00000010":GOSUB7100:GOSUB63000
1200 PRINTDN$"WHAT'S ON THE SCREEN AT LOC'N 1025?":GOSUB63000
1210 PRINTDN$"1[146] EXTRACT THE CONTENTS OF LOC'N 1025":GOSUB63000
1220 PRINTDN$"...THE NUMBER '2'.":GOSUB63000
1230 PRINTDN$"2[146] GET 'PIXEL PATTERN' #2 FROM CH'R MEM'Y[146]":GOSUB63000
1240 PRINTDN$"'PATTERNS' COME IN GROUPS OF 8 BYTES.":GOSUB63000
1250 PRINTDN$"PATTERN #2 COMES FROM 'GROUP #2'.":GOSUB63000
1260 PRINTDN$"'GROUP #0' IS FROM BASE[146] TO BASE[146]+7":GOSUB63000
1270 PRINTDN$"'GROUP #1' IS FROM BASE[146]+8 TO BASE[146]+15":GOSUB63000
1280 PRINTDN$"'GROUP #2' IS FROM BASE[146]+16 TO BASE[146]+23":GOSUB63000
1290 A$=CH$:B$="BASE[146]+16":GOSUB7100
1300 A$=CH$+"[145][145][145]":B$="BASE[146]+17":GOSUB7100
1310 A$=CH$+"[145][145][145][145][145][145]":B$="BASE[146]+18":GOSUB7100
1320 A$=CH$+"[145][145][145][145][145][145][145][145][145]":B$="BASE[146]+23":GOSUB7100
1330 PRINTDN$"THESE 8[146] BYTES DETERMINE 64[146] PIXELS.":GOSUB63000
1340 PRINTDN$"FOR 'NORMAL' CHARACTER MEMORY..":GOSUB63000
1350 PRINTDN$"'GROUP #2' GIVES THE LETTER 'B'.":GOSUB63000
1360 PRINTDN$"..AND A COLOURED 'B' APPEARS ON SCREEN!":GOSUB63000
1370 PRINTDN$"WHAT COLOURS??":GOSUB63000
1380 PRINTDN$"3[146] GO TO COLOUR MEMORY[146](55296)"
1390 PRINTCH$"[157][157] COLOUR MEMORY^ "
1395 B$="[157] [221] [221][145][157][157][157][157][157][157][157][157][157][157][157] [157][157][157][157][157][157][157][157] "
1400 A$=CH$:PRINTA$B$
1410 A$=CH$+"[145][145][145]":PRINTA$B$
1420 A$=CH$+"[145][145][145][145][145][145]":PRINTA$B$
1430 A$=CH$+"[145][145][145][145][145][145][145][145][145]":PRINTA$" ":GOSUB63000
1435 PRINTDN$"JUST NYBBLES..REMEMBER?":GOSUB63000
1440 PRINTDN$"THE SCREEN MEMORY[146] LOC'N IS 1024+1[146]"
1445 A$=SC$:B$="00000010":GOSUB7100:GOSUB63000
1450 PRINTDN$"SO GO TO COLOUR MEMORY[146] LOC'N 55296+1[146]":GOSUB63000
1460 A$=CH$+"[145][145][145][157][157][157][192][192][192][192][192][192][192][192][192]>":B$="1101":GOSUB7100:GOSUB63000
1470 PRINTDN$"THIS MAY HAVE '13'=LIGHT GREEN.":GOSUB63000
1480 PRINTDN$"SO ON[146] PIXELS ARE 'LIGHT GREEN'":GOSUB63000
1490 PRINTDN$"AND OFF[146] PIXELS ARE ????":GOSUB63000
1500 PRINTDN$"BACKGROUND COLOUR[146]!":GOSUB63000
1510 PRINT"[147]";:GOSUB7001:PRINTDN$"SUPPOSE BMM[146]=1:MCM[146]=0"
1520 A$=BMM$:B$="1":GOSUB7100
1530 A$=MCM$:B$="0":PRINTA$B$
1535 GOSUB63000:PRINTDN$"WE'RE IN NORMAL B[146]IT M[146]AP M[146]ODE"
1540 GOSUB63000:GOSUB7606:PRINTDN$"..AND THE SCREEN GOES BANANAS!":GOSUB63000
1550 V=53248:POKEV+17,PEEK(V+17)OR32:FORT=1TO1000:NEXT:POKEV+17,27
1560 PRINTDN$"SEE?":GOSUB63000
1570 PRINTDN$"THE SCREEN WAS FILLED WITH ???":GOSUB63000
1580 PRINTDN$"CHARACTER MEMORY[146]!":GOSUB63000
1590 PRINTDN$"8K BYTES STARTING AT CH'R MEM'Y BASE[146]":GOSUB63000
1600 PRINTDN$"WERE USED TO TURN PIXELS ON[146]/OFF[146]!":GOSUB63000
1610 PRINTDN$"WANT TO SEE THE 'CHARACTERS'?":GOSUB63000
1620 PRINTDN$"I'LL CLEAR THE SCREEN..AND SET BMM[146]=1":GOSUB63000
1630 PRINTDN$"HIT A KEY TO GO TO 'NORMAL'..":GOSUB63000
1640 PRINT"[147]":GOSUB7200
1650 MS$="BANANAS!!!":GOSUB63100
1660 PRINT"[147]THE 'COLOURS' OF THE PIXELS WERE"
1670 PRINT"FROM THE 1000 BYTES OF SCREEN MEMORY[146]."
1680 PRINT"A 'CLEAR' SCREEN MEANS SCREEN MEMORY[146]"
1690 PRINT"CONTAINS '32' EVERYWHERE (32=SPACE)."
1700 PRINT"AND, IN BINARY, 32=0010[146] 0000[146]"
1705 PRINT"(ON[146] PIXEL COLOUR-OFF[146] PIXEL COLOUR)"
1710 PRINT"SO THE ON[146] PIXELS WERE COLOUR #2"
1720 PRINT"(0010='2') AND THE OFF[146][146] PIXELS WERE"
1730 PRINT"COLOUR #0 (0000='0')."
1740 PRINT"THAT GIVES 'RED CHARACTERS' AND"
1750 PRINT"'BLACK BACKGROUND'!":GOSUB63000
1760 PRINT"[147]IF WE WANTED BLUE BACKGROUND AND"
1770 PRINT"WHITE PIXELS, WE'D FILL SCREEN MEMORY"
1780 PRINT"WITH 0001 0110='WHITE' & 'BLUE'='22'"
1785 PRINT"V=53248:POKEV+17,PEEK(V+17)OR32"
1790 PRINT"FORI=0TO999:POKE1024+I,22:NEXT "
1800 PRINT"LET'S TRY IT!":GOSUB63000
1810 V=53248:POKEV+17,PEEK(V+17)OR32
1820 FORI=0TO999:POKE1024+I,22:NEXT:POKEV+17,27:PRINT"[147]"
1830 MS$="GORGEOUS!":GOSUB63100
1840 PRINT"[147]YOU DID[146] SEE SOME OF THE 'CHARACTERS'"
1850 PRINT"IN CHARACTER MEMORY[146], RIGHT?"
1860 PRINT"LET'S LOOK AT ANOTHER PART OF MEMORY."
1870 PRINT"WE'LL CHANGE CHARACTER MEMORY[146] BASE"
1880 PRINT"TO SOMEPLACE OTHER THAN 55296[146] WITH"
1890 PRINT"POKEV+24,(PEEK(V+24)AND240) OR X"
1900 PRINT"WHERE X[146] IS 3,5,7,9,11,13 OR 15":GOSUB63000
1910 PRINT"[147]WHEN WE RETURN FROM THIS ABNORMAL"
1911 PRINT"SCREEN DISPLAY WE'LL HAVE A"
1912 PRINT"WIERD 'CHARACTER SET'!!"
1913 PRINT"I'LL PRINT THE ALPHABET SO YOU"
1914 PRINT"CAN SEE JUST HOW WEIRD!"
1915 MS$=" READY[146]?":GOSUB63100:GOSUB63000:PRINT"[147]":X=9:NN=1
1920 V=53248:POKEV+17,PEEK(V+17)OR32
1930 POKEV+24,17+X:NN=NN+1:IFNN>6THEN1950
1940 FORT=1TO500:NEXT:X=9-X:GOTO1930
1950 POKEV+17,27:MS$="NICE!NICE!":GOSUB63100:GOSUB63100:PRINT""
1960 AL$="ABCDEFGHIJKLMNOPQRSTUVWXYZ":FORI=1TO26:PRINTMID$(AL$,I,1);
1970 FORT=1TO200:NEXT:NEXT:POKEV+24,21:GOSUB63100
1990 PRINT"[147]LET'S DO THAT AGAIN BUT ALSO CHANGE"
2000 PRINT"SCREEN MEMORY[146] WHICH"
2010 PRINT"GIVES THE COLOURS!"
2020 PRINT"WE'LL:"
2030 PRINT"POKEV+24,X"
2040 PRINT"WHERE X=256*RND(1)":MS$=" READY?[146]":GOSUB63100
2050 GOSUB63000:V=53248:FORI=1TO20:X=256*RND(1):POKEV+24,X:FORT=1TO200:NEXT:NEXT
2060 A$="[147]RANDOM SCREEN MEMORY[146]!"+CHR$(13)
2070 A$=A$+"AND RANDOM CHARACTER MEMORY[146]!"
2080 FORI=1TOLEN(A$):PRINTMID$(A$,I,1);:FORT=1TO50:NEXT:NEXT
2090 MS$=" SLICK":GOSUB63100:POKEV+24,21:GOSUB63000
2100 PRINT"[147]BUT WE OBVIOUSLY WEREN'T IN "
2105 PRINT"BIT MAP MODE[146], SINCE ONLY THE"
2106 PRINT"'PRINTED CHARACTERS' WERE AFFECTED."
2107 PRINT"(THEY CHANGED 'SHAPE' AND 'COLOUR')"
2110 PRINT"SO WE'LL DO IT AGAIN"
2120 PRINT"WITH BMM[146]=1"
2130 PRINT"V=53248:POKEV+17,PEEK(V+17)OR32 "
2140 PRINT"FORI=0TO20:POKEV+24,256*RND(1):NEXT"
2150 MS$=" READY[146]?":GOSUB63100:GOSUB63000
2160 V=53248:POKEV+17,PEEK(V+17)OR32
2170 FORI=0TO20:POKEV+24,256*RND(1):FORT=1TO200:NEXT:NEXT:PRINT"[147]"
2180 MS$="MAMMA MIA!":GOSUB63100:POKE53265,27:POKE53272,21:GOSUB63100:GOSUB63000
2190 PRINT"[147]"
2200 FORI=7TO15:FORJ=0TO39:SS=40*I+J:POKE1024+SS,I-6:POKE55296+SS,0:NEXT:NEXT
2210 PRINT"****************************************"
2220 PRINT"YOU THINK THESE ARE A,B,C, ETC.?"
2230 PRINT"WRONG[146]! THEY'RE COLOURS!"
2240 PRINT"WEPOKE 1,2,3.. TO SCREEN MEMORY"
2250 PRINT"AND GET (NORMALLY) A,B,C,.."
2260 PRINT"BUT 1,2,3..IN SCREEN MEMORY[146] DEFINE"
2265 PRINT"COLOURS WHEN IN BIT MAP MODE[146]!!!":MS$="HIT A KEY":GOSUB63100
2270 GETA$:IFA$=""THEN2270
2275 V=53248:POKEV+17,PEEK(V+17)OR32
2280 GETA$:IFA$=""THEN2280
2290 POKEV+17,27:MS$="!!!SEE????":GOSUB63100
2300 PRINT"[147]NOW LET'S TRY M[146]ULTI C[146]OLOUR M[146]ODE."
2310 PRINT"WE'LL SET BMM[146]=0 (NO BIT MAP)"
2320 PRINT"AND MCM[146]=1 (MULTI COLOUR).":GOSUB63000
2330 PRINT"[147]";:GOSUB7001:A$=BMM$:B$="0":GOSUB7100:A$=MCM$:B$="1":GOSUB7100
2340 GOSUB7609:MS$="GO!GO!GO!":GOSUB63000
2350 PRINT"[147]IN MULTI COLOUR MODE[146] WE GET 'NORMAL'"
2360 PRINT"CHARACTERS FROM CHARACTER MEMORY"
2370 PRINT"(A '1' IN SCREEN MEMORY GIVES THE"
2380 PRINT"PIXEL PATTERN FOR AN 'A')"
2390 PRINT"BUT[157][157][157][184][184][184][145]..THE BIT PAIRS[157][157][157][157][157][184][184][184][184][184][145] 00,01,10,11"
2400 PRINT"EACH PRODUCE DIFFERENT COLOURED"
2410 PRINT"PIXEL PAIRS[157][157][157][157][157][184][184][184][184][184][145].":MS$="PEARS....?":GOSUB63100:GOSUB63000
2420 PRINT"[147]THE 'PIXEL PATTERN' FOR AN 'A' IS:":A$="PAIRS"
2430 PRINT"00011000"
2440 PRINT"00100100"
2450 PRINT"01000100"
2460 PRINT"01111100"
2470 PRINT"01000100"
2480 PRINT"01000100"
2490 PRINT"01000100"
2500 PRINT"00000000"
2510 PRINT"AND, TAKEN IN PEARS";:FORT=1TO1000:NEXT:FORI=1TO5:PRINT"[157] [157]";:
2520 FORT=1TO500:NEXT:NEXT:FORI=1TO5:PRINTMID$(A$,I,1);:FORT=1TO500:NEXT:NEXT
2530 PRINT"00[146]0110[146]00"
2540 PRINT"0010[146]0100"
2550 PRINT"01[146]0001[146]00"
2560 PRINT"0111[146]1100"
2570 PRINT"01[146]0001[146]00"
2580 PRINT"0100[146]0100"
2590 PRINT"01[146]0001[146]00"
2600 PRINT"0000[146]0000"
2610 PRINT"AND 00[146]=COLOUR #0":PRINT" 01[146]=COLOUR #1"
2620 PRINT" 10[146]=COLOUR #2":PRINT" 11[146]=COLOUR #3":GOSUB63000
2630 MS$=" V+??[146][146]":GOSUB63100:GOSUB63000:PRINT"[147]";:GOSUB7005:GOSUB63000
2635 PRINT"COLOUR #0[146] REGISTER"
2636 PRINT"COLOUR #1[146] REGISTER"
2637 PRINT"COLOUR #2[146] REGISTER"
2640 PRINTDN$"WE WANT 00[146] PATTERN = RED (2)":GOSUB63000
2650 A$=BMM$:B$="[157][157][157][157][214][214][214][214]0010":GOSUB7100
2660 PRINTDN$"WE WANT 01[146] PATTERN = WHITE (1)":GOSUB63000
2670 A$=MCM$:B$="[157][157][157][157][157][157][214][214][214][214]0001":GOSUB7100
2680 PRINTDN$"WE WANT 10[146] PATTERN = LIGHT BLUE (14)":GOSUB63000
2690 A$=CMB$:B$="[157][157][157][157][157][157][157][157][214][214][214][214]1110":GOSUB7100
2700 PRINTDN$"AND 11[146]...??":GOSUB63000
2710 PRINTDN$"AT SCREEEN LOC'N 1025 WE WANT 'GREY 1'":GOSUB63000
2720 PRINTDN$"..AND 'GREY 1' IS COLOUR '12'...":GOSUB63000
2730 PRINTDN$"..SO WE PUT '12' INTO COLOUR MEMORY..":GOSUB63000
2740 PRINTDN$"AND 1025=1024+1[146], SO...":GOSUB63000
2750 PRINTDN$"WE PUT '12' INTO 55296+1[146]!":GOSUB63000
2760 A$=SC$:B$="00000001":GOSUB7100:PRINTDN$"HERE'S OUR 'A'":GOSUB63000
2765 A$=CH$+"[145][145][145][157][157][157][192]>":B$="1100":GOSUB7100
2770 PRINTDN$"AND HERE'S OUR 'GREY 1'..":GOSUB63000
2771 PRINT"[147]WAIT[157][157][157][157][184][184][184][184][145]!!!"
2772 PRINT"REMEMBER[146]: IN MULTI COLOUR MODE"
2773 PRINT"BITS 0,1,2 OF A COLOUR MEMORY"
2774 PRINT"NYBBLE GIVE ONE OF EIGHT[146] COLOURS"
2775 PRINT"FOR THE '11' BIT PATTERN, BUT[157][157][157][184][184][184]"
2776 PRINT"BIT 3 SAYS WHETHER THAT PARTICULAR"
2778 PRINT"SCREEN POSITION IS[157][157][184][184][145] IN[146] MULTI-COLOUR":PRINT"MODE!!":GOSUB63000
2780 PRINT"[147]WITH THE SETUP SHOWN, A '1' IN"
2790 PRINT"SCREEN MEMORY[146] LOCATION 1025 WOULD"
2800 PRINT"YIELD A MULTI-COLOURED 'A' ON THE"
2810 PRINT"SCREEN..IN RED, WHITE, BLUE AND PURPLE[146]!"
2815 PRINT"('12'=8+4:8='MULTI';4='PURPLE')."
2820 PRINT"SINCE V+33,V+34 AND V+35 ARE 'SHARED',"
2830 PRINT"ALL[157][157][157][184][184][184][145] CHARACTERS WOULD SHARE"
2840 PRINT"THE RED, WHITE AND BLUE...BUT THE"
2850 PRINT"PURPLE COULD CHANGE FROM ONE SCREEN"
2860 PRINT"POSITION TO ANOTHER.":MS$="4=PURPLE!":GOSUB63100:GOSUB63000
2870 MS$="LET'S TRY!":GOSUB63100:GOSUB63000:PRINT"[147]":POKE53281,15
2875 V=53248:POKEV+17,27:POKEV+34,0:POKEV+35,0:POKEV+22,200:MS$=" DONE"
2880 A$="LET'S PUT AN 'A' INTO THE BOX:":GOSUB7500
2890 PRINT"POKE 1024+42,1[146] :REM '1' IS 'A'"
2900 PRINT" [176][192][174][157][157][157][221] [221][157][157][157][173][192][189]":GOSUB63000:POKE1024+42,1:GOSUB63100
2910 A$="LET'S MAKE IT A 'GREY 1-A':":GOSUB7500
2920 PRINT"POKE55296+42,12[146]:REM '12' IS 'GREY 1'":GOSUB63000:POKE55296+42,12
2925 GOSUB63100
2930 A$="TURN ON MULTI-COLOUR:":GOSUB7500
2940 PRINT"POKEV+22,PEEK(V+22)OR16[146]:MCM=1":GOSUB63000
2950 V=53248:POKEV+22,PEEK(V+22)OR16:GOSUB63100
2955 A$="CHANGES THINGS DOESN'T IT?!?":GOSUB7500:GOSUB63000
2960 A$="CHOOSE WHITE FOR COLOUR #2":GOSUB7500
2970 PRINT"POKEV+35,1[146]:WHITE IS '1'":GOSUB63000:POKEV+35,1:GOSUB63100
2980 A$="CHOOSE GREEN FOR COLOUR #1":GOSUB7500
2990 PRINT"POKEV+34,5[146]:GREEN IS '5'":GOSUB63000:POKEV+34,5:GOSUB63100
3000 A$="CHOOSE YELLOW FOR COLOUR #0":GOSUB7500
3010 PRINT"POKEV+33,7[146]:YELLOW IS '7'":GOSUB63000:POKEV+33,7:GOSUB63100
3020 GOSUB63000:POKEV+17,27:POKEV+33,1:POKEV+22,200
3030 PRINT"[147]AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
3040 PRINT"****************************************";
3050 PRINT"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
3060 PRINT"****************************************":MS$=" DONE"
3070 PRINT"SINCE WE CAN HAVE MULTI COLOUR[146]"
3080 PRINT"IN SOME PLACES AND NOT IN OTHERS....":GOSUB63000
3085 V=53248:POKEV+22,PEEK(V+22)OR16:POKEV+34,0:POKEV+35,3
3090 A$="FORI=0TO79:POKE55296+I,4:NEXT[146]:PURPLE":GOSUB7500:GOSUB63000
3100 FORI=0TO79:POKE55296+I,4:NEXT:GOSUB63100
3110 A$="FORI=80TO159:POKE55296+I,12:NEXT[146]:+MULTI":GOSUB7500:GOSUB63000
3120 FORI=80TO159:POKE55296+I,8+4:NEXT:GOSUB63100
3130 A$="FORI=80TO159:POKE55296+I,8:NEXT[146]":GOSUB7500:GOSUB63000
3140 FORI=80TO159:POKE55296+I,8:NEXT:GOSUB63100
3150 A$="FORI=80TO159:POKE55296+I,9:NEXT[146]":GOSUB7500:GOSUB63000
3160 FORI=80TO159:POKE55296+I,9:NEXT:GOSUB63100
3170 A$="FORI=80TO159:POKE55296+I,15:NEXT[146]":GOSUB7500:GOSUB63000
3180 FORI=80TO159:POKE55296+I,15:NEXT:GOSUB63100:GOSUB63000:MS$="NOW......"
3190 GOSUB63100:GOSUB63000:MS$=" MCM=0[146]":GOSUB63100:GOSUB63000
3195 POKEV+22,200:MS$=" GREY 3":GOSUB63100
3200 PRINT"[147]NOW YOU TRY PLAYING WITH MULTI COLOUR[146].":MS$="PLAY!PLAY!"
3210 GOSUB63100:GOSUB63000
4000 A$(1)="0123456789ABCDEF "
4010 A$(2)="!#$%&'()[219]-\:;<>/ "
4020 A$(3)="[209][215][171][179][177][178][213][201][202][203][255][193][211][218][216][181] "
4030 A$(4)="[206][206][206][206][206][206][206][206][206][206][206][206][206][206][206][206] "
4040 A$(5)="[205][205][205][205][205][205][205][205][205][205][205][205][205][205][205][205] "
4050 A$(6)="[181][181][181][181][181][181][181][181][181][181][181][181][181][181][181][181] "
4060 A$(7)="**************** "
4070 D$=""
4080 PRINT"[147]";:FORI=1TO7:PRINTA$(I)A$(I):NEXT:PRINT" MULTI NORMAL"
4085 PRINTD$"ENTER -1[146] TO QUIT"
4086 PRINT"(ENTER COLOUR NUMBERS 0-7)"
4090 V=53248:POKEV+22,216:REM MULTI
4100 INPUT"11[146]-COLOUR";C3
4105 IFC3<0THEN4200
4106 PRINT" [157][157][157][157][157][157][157][157][157][157][157]"C$(C3)
4110 INPUT"10[146]-COLOUR";C2
4115 IFC2<0THEN4200
4116 PRINT" [157][157][157][157][157][157][157][157][157][157][157]"C$(C2)
4120 INPUT"01[146]-COLOUR";C1
4125 IFC1<0THEN4200
4126 PRINT" [157][157][157][157][157][157][157][157][157][157][157]"C$(C1)
4130 POKEV+34,C1AND15:POKEV+35,C2AND15
4140 FORI=0TO6:FORJ=0TO35
4150 POKE55296+40*I+J,(C3-8*(J<16))AND15
4160 NEXT:NEXT:GOTO4090
4200 POKEV+22,200:GOSUB60000:PRINT"[147][144]IN MULTI COLOUR MODE[146] (MCM=1 IN V+22)"
4205 PRINT"THE RESOLUTION IS LESS THAN IN STANDARD"
4210 PRINT"MODE...BUT IT DOES[157][157][157][157][184][184][184][184][145] GIVE MORE COLOURS!"
4215 PRINT"SUPPOSE YOU WANTED 'NORMAL' CHARACTERS"
4220 PRINT"BUT WITH A CHOICE OF COLOURS FOR"
4225 PRINT"PIXELS ON[146] AND PIXELS OFF[146]."
4230 PRINT"(FOR 'CHARACTER' AND 'BACKGROUND')."
4240 PRINT"THEN USE EXTENDED COLOUR MODE[146]!!":MS$="SET ECM=1?":GOSUB63100
4245 GOSUB63000:PRINT"[147]":MS$="LET'S TRY":GOSUB63100
4250 V=53248:POKEV+17,91:POKE1024,1
4260 :
4290 PRINT"[147]":FORI=0TO15:I$=RIGHT$(" "+STR$(I),2)
4300 PRINTI$"="C$(I):NEXT:PRINT:PRINTC$(I)
4310 POKE1066,1+64
4320 INPUT"COLOUR OF CHARACTER";CC:IFCC<0THENPOKEV+17,27:GOTO4400
4330 POKE55338,CC
4340 INPUT"BACKGROUND COLOUR ";BK:IFBK<0THENPOKEV+17,27:GOTO4400
4350 POKEV+34,BK
4360 GOTO4320
4400 PRINT"[147]";:GOSUB7003
4410 PRINTDN$"WE SET BMM[146]=0 (NO BIT MAP)":GOSUB63000
4420 A$=BMM$:B$="0":GOSUB7100
4430 PRINTDN$"WE SET MCM[146]=0 (NO MULTI COLOUR)":GOSUB63000
4440 A$=MCM$:B$="0":GOSUB7100
4450 PRINTDN$"AND NOW SET ECM[146]=1 (!!!)":GOSUB63000
4460 A$=BMM$:B$="[157][157]1":GOSUB7100:GOSUB7612:GOSUB63000
4470 PRINTDN$"NOW[146],WE POKE 1025 WITH SOMETHING..":GOSUB63000
4475 A$=SC$:B$="01101101":GOSUB7100
4480 PRINTDN$"WHAT GOES ON THE SCREEN??":GOSUB63000
4490 PRINTDN$"1[146]:GET NUMBER IN SCREEN MEMORY(1025)":GOSUB63000
4500 PRINTDN$"LOOK AT BOTTOM 6 BITS!!":GOSUB63000:B0$=B$
4510 A$=SC$:PRINTA$B0$:B$=""+RIGHT$(B0$,11):GOSUB7100
4520 PRINTDN$"THESE GIVE '45'...":GOSUB63000
4530 PRINTDN$"2[146]:GET 'PIXEL PATTERN #45'":GOSUB63000
4540 PRINTDN$"FROM CHARACTER MEMORY[146]..8 BYTES":GOSUB63000
4550 PRINTDN$"(HAPPENS TO BE +[146])":GOSUB63000
4560 PRINTDN$"3[146]:PUT A +[146] ON THE SCREEN AT 1025":GOSUB63000
4570 PRINTDN$"4[146]:USE THE COLOUR NYBBLE AT 55296+1[146]"
4580 A$=CH$+"[145][145][145][157][157][157][192]>":B$="0101":GOSUB7100:GOSUB63000
4590 PRINTDN$"THIS DETERMINES THE ON[146] PIXELS!":GOSUB63000
4595 PRINTDN$"(HAPPENS TO BE 'GREEN')":GOSUB63000
4600 PRINTDN$"..AND, FOR THE BACKGROUND???":GOSUB63000
4610 PRINTDN$"5[146]:STRIP OFF THE TOP 2 BITS"
4620 A$=SC$:B$=LEFT$(B0$,4)+"[146]"+RIGHT$(B0$,11):GOSUB7100:GOSUB63000
4630 PRINTDN$"THESE GIVE 00,01,10 OR 11":GOSUB63000
4640 PRINTDN$"OR..N=0,1,2 OR 3 (DECIMAL)":GOSUB63000
4650 PRINTDN$"5[146]:USE AS BACKGROUND COLOUR....":GOSUB63000
4660 PRINTDN$"THE COLOUR IN THE COLOUR REGISTER":GOSUB63000
4670 PRINTDN$"V+33+N[146]!!!":GOSUB63000
4675 PRINT"[147]";
4676 A$="V+33 COLOUR #0"
4677 B$="V+34 COLOUR #1"
4678 C$="V+35 COLOUR #2"
4679 D$="V+36 COLOUR #3"
4680 PRINTNN$(1):PRINTNN$(2)A$:PRINTNN$(3)
4690 PRINTNN$(1):PRINTNN$(2)B$:PRINTNN$(3)
4700 PRINTNN$(1):PRINTNN$(2)C$:PRINTNN$(3)
4710 PRINTNN$(1):PRINTNN$(2)D$:PRINTNN$(3)
4720 MS$="4 COLOURS":GOSUB63100:GOSUB63000
4730 PRINT"[147]NOTE THAT ONLY 6 BITS[146] OF THE NUMBER"
4740 PRINT"IN SCREEN MEMORY ARE USED TO DEFINE"
4750 PRINT"A 'CHARACTER'. SINCE 2^6=64 THEN ONLY"
4760 PRINT"64 CHARACTERS[146] ARE AVAILABLE IN"
4770 PRINT"EXTENDED COLOUR MODE[146]"
4780 PRINT"INCLUDING 'A'-'Z' AND '0'-'9'"
4790 PRINT"AND SOME OTHERS.":MS$=" WATCH":GOSUB63100:GOSUB63000:PRINT"[147]"
4800 FORI=0TO255:POKE1024+I,I:POKE55296+I,0:NEXT:V=53248:POKEV+17,91
4810 PRINT"MOST GRAPHICS GONE!!!!":GOSUB63100:GOSUB63000:POKEV+17,27
4820 POKEV+17,91:FORT=1TO500:NEXT:POKEV+17,27
4840 FORT=1TO500:NEXT:POKEV+17,27
4845 GETA$:IFA$=""THEN4820
4850 MS$=" GONE":GOSUB63100:GOSUB63000
4860 PRINT"[147]";:FORI=0TO7:PRINTA$(I):NEXT:X=0
4870 PRINT"SET ECM[146]="X:POKEV+17,27-64*(X=1)
4880 FORT=1TO500:NEXT:X=1-X
4890 GETA$:IFA$=""THEN4870
4900 POKEV+17,27
5000 PRINT"[147]USE EXTENDED COLOUR MODE"
5010 PRINT"FOR ALPHANUMERIC DISPLAYS IN"
5020 PRINT"MULTI-COLOUR."
5030 PRINT"USE MULTI-COLOUR MODE[146] FOR ...":GOSUB63000:MS$=" SPRITES![146]"
5040 GOSUB63100:GOSUB63000
6999 MS$="AU REVOIR!":PRINT"[147]":GOSUB63100:PRINT"":END
7000 REM REGISTERS ETC.
7001 A$="V+17":B$="V+22":C$="V+24":D$="SCREEN MEMORY":E$="CHARACTER MEMORY"
7002 GOSUB7010:RETURN
7003 A$="V+17":B$="V+22":C$="V+24":D$="SCREEN MEMORY":E$="COLOUR MEMORY "
7004 GOSUB7300:RETURN
7005 A$="V+33":B$="V+34":C$="V+35":D$="SCREEN MEMORY":E$="COLOUR MEMORY "
7006 GOSUB7300:RETURN
7010 PRINTNN$(1):PRINTNN$(2)A$:PRINTNN$(3)
7020 PRINTNN$(1):PRINTNN$(2)B$:PRINTNN$(3)
7030 PRINTNN$(1):PRINTNN$(2)C$:PRINTNN$(3)
7040 PRINTL$,L$:PRINTNN$(1),NN$(1):PRINTNN$(2),NN$(2):PRINTNN$(3),NN$(3)
7050 PRINTNN$(1),NN$(1):PRINTNN$(2),NN$(2):PRINTNN$(3),NN$(3)
7060 PRINTNN$(1),NN$(1):PRINTNN$(2),NN$(2):PRINTNN$(3),NN$(3)
7070 PRINT" ^"D$,"^"E$
7080 RETURN
7100 REM BITS DISPLAY
7110 FORII=1TO5:PRINTA$B$:FORTT=1TO100:NEXT:PRINTA$""B$:FORTT=1TO100:NEXT
7120 NEXT:RETURN
7200 REM BIT MAP MODE
7210 V=53248:POKEV+17,PEEK(V+17)OR32
7220 GETA$:IFA$<>""THEN7220
7230 GETA$:IFA$=""THEN7230
7240 POKEV+17,27:RETURN
7300 REM REGISTERS ETC.
7310 PRINTNN$(1):PRINTNN$(2)A$:PRINTNN$(3)
7320 PRINTNN$(1):PRINTNN$(2)B$:PRINTNN$(3)
7330 PRINTNN$(1):PRINTNN$(2)C$:PRINTNN$(3)
7340 PRINTL$,L$:PRINTNN$(1),N$(1):PRINTNN$(2),N$(2):PRINTNN$(3),N$(3)
7350 PRINTNN$(1),N$(1):PRINTNN$(2),N$(2):PRINTNN$(3),N$(3)
7360 PRINTNN$(1),N$(1):PRINTNN$(2),N$(2):PRINTNN$(3),N$(3)
7370 PRINT" ^"D$,"^"E$
7380 RETURN
7500 REM SLOW PRINT
7510 PRINTDD$;:FORI=1TOLEN(A$):PRINTMID$(A$,I,1);:FORT=1TO10:NEXT:NEXT
7520 PRINT:RETURN
7600 A$="_MAGIC REGISTERS"
7601 B$="_ IN THE "
7602 C$="_ VIDEO CHIP ":GOSUB7620:RETURN
7603 A$=" [176][192][192][192][192][192][192][192][192][192][192][192][192][174] "
7604 B$=" [221]NORMAL MODE[221] "
7605 C$=" [173][192][192][192][192][192][192][192][192][192][192][192][192][189] ":GOSUB7630:RETURN
7606 A$=" [176][192][192][192][192][192][192][192][192][192][192][192][192][174] "
7607 B$=" [221]BIT MAP MODE[221] "
7608 C$=" [173][192][192][192][192][192][192][192][192][192][192][192][192][189] ":GOSUB7630:RETURN
7609 A$=" [176][192][192][192][192][192][192][192][192][192][192][192][192][174] "
7610 B$=" [221]MULTI-COLOUR[221] "
7611 C$=" [173][192][192][192][192][192][192][192][192][192][192][192][192][189] ":GOSUB7630:RETURN
7612 A$=" [176][192][192][192][192][192][192][192][192][192][192][192][192][174] "
7613 B$=" [221]EXT.COL.MODE[221] "
7614 C$=" [173][192][192][192][192][192][192][192][192][192][192][192][192][189] ":GOSUB7630:RETURN
7620 PRINTPS$A$:PRINTPS$""B$:PRINTPS$""C$:RETURN
7630 PRINTPS$A$:PRINTPS$""B$:PRINTPS$""C$:RETURN
60000 REM INITIALIZE
60001 BT$="":FORI=1TO24:BT$=BT$+"":NEXT:PRINTCHR$(142)
60002 PT$="[176][192][192][192][192][192][192][192][192][192][192][174][157][157][157][157][157][157][157][157][157][157][157][157][221][221][157][157][157][157][157][157][157][157][157][157][157][157][173][178][192][192][192][192][192][192][192][192][178][189]"
60003 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][206][163][163][163][163][163][163][163][163][163][163][163][163][205][157][157][157][157][157][157][157][157][157][157][157][157][157][157][165]============[144][167]"
60004 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][157][208][207][163][163][163][163][163][163][163][163][163][163][208][207][145][145][145][145][157][157][157][157][157][157][157][157][157][157][157][157]"
60005 PT$=BT$+"[145][145][145][145][145][145]"+PT$
60007 ML$=""
60008 WD=40:CRT=1024
60009 W2=WD/2:W3=WD-1:W1$=MID$(STR$(WD),2):POKE53281,15:POKE53280,12:PRINT"[144]"
60010 V=53248:FORI=0TO16:POKEV+I,0:NEXT:POKEV+22,200
60011 POKEV+23,0:POKEV+29,0:FORI=0TO7:POKEV+39+I,0:NEXT:POKEV+17,27:POKEV+24,21
60012 N$(1)="[176][192][178][192][178][192][178][192][174]"
60013 N$(2)="[221] [221] [221] [221] [221]"
60014 N$(3)="[173][192][177][192][177][192][177][192][189]"
60015 NN$(1)="[176][192][178][192][178][192][178][192][178][192][178][192][178][192][178][192][174]"
60016 NN$(2)="[221] [221] [221] [221] [221] [221] [221] [221] [221]"
60017 NN$(3)="[173][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][189]"
60020 R$="[176][178][178][178][178][178][178][178][174][157][157][157][157][157][157][157][157][157][173][177][177][177][177][177][177][177][189][145]"
60030 L$="- - - - - - - - -"
60040 PS$=""
60050 DN$=""
60060 BMM$="":MCM$="":SMB$=""
60070 CMB$=SMB$+"":CL$=" "
60080 DN$=DN$+CL$+DN$
60090 SC$=SMB$+""
60100 CH$=SC$+""
60110 DD$="":DD$=DD$+CL$+DD$
60115 IF D9=0 THEN DIM C$(16):FORI=0TO16:READC$(I):NEXT
60116 DATABLACK,WHITE,RED,CYAN,PURPLE,GREEN,BLUE,YELLOW
60117 DATAORANGE,BROWN,LIGHT RED,GRAY 1,GRAY 2,LIGHT GREEN,LIGHT BLUE,GRAY 3
60118 DATA ENTER NEGATIVE NUMBER TO QUIT
60200 D9=1:RETURN
62000 GOSUB63000
62001 PRINTSD$CL$:PRINTCL$:PRINTCL$
62003 RETURN
63000 PRINT"[144]HIT RETURN[146] TO CONTINUE";
63001 GETA$:IFA$<>""THEN63001
63002 GETA$:IFA$=""THEN63002
63003 RETURN
63100 FORT=1TO5:PRINTPT$MS$;
63101 PRINTPT$" ";
63102 PRINTPT$MS$;:NEXT
63103 PRINT"[144]":RETURN
63900 SD$="":CL$="[146] [146]"
63901 SR$=""
63902 RETURN